package cn.ording.dao;

import java.io.Serializable;
import java.util.List;

import cn.ording.util.Page;

/**
 * Data access object (DAO) for domain model
 * @author MyEclipse Persistence Tools
 */
public interface BaseDao<T> {

	/**
	 * 查询-通过主键ID查询
	 * 
	 * @param id
	 * @return
	 */
	T query(Serializable id);

	/**
	 * 查询-查询全部
	 * 
	 * @return
	 */
	List<T> query(String queryMethod);
	/**
	 * 按参数查询
	 * 
	 * @return 查询结果
	 */
	List<T> query(String select,Object[] object,String queryMethod); 
	/**
	 * 使用本地sql语句
	 */
	List<T> queryBySql(String select ,Object[] objects,String queryMethod);
	/**
	 * 使用本地sql语句
	 */
	List<T> queryBySql(String select ,Object[] objects,String queryMethod,Class entity);
	
	List queryForPage(final String selectCount, final String select, final Object[] values, final Page page,final String queryMethod);
	
	List queryForList(final String select, final Object[] conditions,final Object[] values, final Page page,final String queryMethod ,final Class<T> targetClass);
	/**
	 * 查询
	 * 
	 * @param clazz
	 *            要查询的对象
	 * @param orderFileds
	 *            排序字段
	 * @return 返回<code>List</code>类型对象
	 */
	List<T> queryByOrder(String orderField,String queryMethod);

	/**
	 * 分页查询
	 * 
	 * @param page
	 * @return
	 */
	List<T> query(Page page,String queryMethod);

	/**
	 * 创建
	 * 
	 * @param t
	 */
	void create(T t);

	/**
	 * 删除
	 * 
	 * @param t
	 */
	void delete(T t)throws Exception;

	/**
	 * 删除-通过主键删除
	 * 
	 * @param id
	 */
	void delete(Serializable id);

	/**
	 * 更新
	 * 
	 * @param t
	 */
	void update(T t);

}